import {
  cache
} from '@/utils/methods.js'

// 在需要使用域名的地方
const env = process.env.NODE_ENV === 'production' ? require('./prod.env') : require('./dev.env')

// 使用配置中的域名
export const baseUrl = env.API_BASE_URL
export default function request(url, method, data, params, temporary) {
  let token = cache('user_token', null)

  let loadingTimer = setTimeout(() => {
    // show loading component
    uni.showLoading({
      title: '加载中'
    })
  }, 2000) // Show loading after 2 seconds

  return new Promise((resolve, reject) => {
    uni.request({
      url: baseUrl + url + buildQueryString(params), // buildQueryString 是将 params 参数转换为查询字符串的函数
      method,
      data,
      header: {
        Authorization: token || temporary
      },
      success(res) {
        clearTimeout(loadingTimer) // Cancel the loading timer
        uni.hideLoading()
        if (res.data.code === 401) {
          // 处理 401 错误
          uni.showToast({
            title: '登录凭证失效，请重新授权',
            icon: 'none',
            duration: 2000 // 显示时间为2秒
          })
          setTimeout(() => {
             // uni.$emit('showUnauthorizedPopup');
            uni.redirectTo({
              url: '/pages/index/index'
            })
          }, 2000)
        } else {
          resolve(res.data)
        }

      },
      fail(err) {
        clearTimeout(loadingTimer) // Cancel the loading timer
        uni.hideLoading()
        if (err && err.errMsg) {
          // 如果存在错误信息，则显示错误信息
          uni.showToast({
            title: err.errMsg,
            icon: 'none'
          })
        } else {
          // 否则显示默认错误提示
          uni.showToast({
            title: '请求失败，请稍后再试',
            icon: 'none'
          })
        }
        reject(err)
      }
    })
  })
}

// 将对象转换为查询字符串
function buildQueryString(params) {
  if (!params) return ''
  return '?' + Object.keys(params)
    .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))
    .join('&')
}
